Monas Project Module
Monasのモジュールについて書いていく
前提:
Monasは分散型PDSの実現をさせるが、その中でもいくつかの部品に分かれている 全て1つでMonasと呼んでいるが、もっとモジュールごとに分けて考えることでシンプルに考えることができるのではないかと思う もっとそれぞれの部品を独立して考えることにより、Monasは多くの役割を担うことができると思う 「僕たちは何をなんのために開発する必要があるのか」
「SDKとして何を提供するのか」を基準に考える
現状:
現在主要な機能として、以下のように挙げている
もちろんこの中でもどのように通信を行うのか、どのような暗号化ライブラリを使うのかなどもっと分けられると思うが、一旦は上記2つから始めてみる
なんかそれぞれ毎に名前をつけたくなってくるね...wYudai.icon
モジュール:
DID
特徴:
中央機関や認証局に依存することなく、識別子をDID controllerは制御することができる
DIDの役割:
公開鍵ペアと識別子を紐づけることができる
署名することができる
Monasでの役割:
DIDに紐づいてデータは保存される
DID controllerはアクセス制御を行うことができる
issue:
鍵自体をdid controllerが保存する必要がある
鍵のローテーションが困難
どこを採用するかによっては既存と変わらない可能性がある(idが削除される)
それぞれDID同士の相互運用性
DID methodは乱立しており、それぞれresolve方法が異なる
前提としてどこのVDRを選択しているかによって、依存性は上がる
ただここで表現している結合度とは特定のプロトコルに使用するために開発されたDIDはそのプロトコルとの結合度が高く、ユースケースはそのプロトコルだけになっている 名前でdid:vdaって定義づけることもある意味ではそうなんだよね
そう考えるとdid:monas:ってのを作るのは合理的でもない可能性があり、実はめっちゃ良いDIDってのが存在している可能性があるのかも?
開発を進めるというより、リサーチすることのほうが優先事項は高いね
Yuto.iconと話してた時にdidを初めから採用することを決めるより、開発者に委ねて抽象化する方が良いんじゃない?って言葉は僕の中で1つちゃんと話したい部分ではある
ちなみにね、今のところはそれはMonas側で強制したいと思っちゃう部分でもあるかもYudai.icon 暗号化データ構造
特徴
Cryptree algorithmを実装することで直感的で柔軟なアクセス制御を実現する
暗号化データ構造の役割
アクセス制御機能
Readアクセス制御
ファイルの共有
Writeアクセス制御
共同編集
許可した人以外には内容を読み取る事はできない
親ノードと子ノードをリンクすることで、親ノードで子ノードを一度に共有することができる
正確にはparent_keyとchild_key
Monasでの役割
上記のデータ構造の役割と同じ役割を担っている
issue
Cryptreeの論文では現在実装より鍵の種類が多いが、鍵の種類が増えると遅くなる そのため現状は少なくしている
鍵の保存場所はどこがいいのか
IndexedDBを採用してみた
対称鍵の暗号化アルゴリズムはどこが最適なのか
鍵生成の仕方
ルートノードのcidが変化する
状態保存ネットワーク
特徴
最低限の閾値でのコンセンサスアルゴリズム
価値の移転が起こらない前提?
状態保存ネットワークの役割
事象の順序付けを行い合意形成を行う
どのように順位づけを行うのかを定義づける
最新な状態であるかを検証することができる
信頼することができる
Monasでの役割
ユーザーが設定したPeer同士でネットワークが形成される
PDSの状態管理の役割を担う
他のPDSサービスとの連携を可能にする
issue
ユーザーを含んでネットワークを構築するべきか否か
最低限の閾値はどこなのか
またユーザーのデバイスで計算する事はできるのか
ネットワークに参加する人はなぜ参加していくれるのか
インセンティブに近い話
通信プロトコル
特徴
情報の伝達をどのように行うのかを決定する
通信プロトコルの役割
特徴と同じかも?
Monasでの役割
アクセス許可者への情報の伝達
key情報や検証情報などの伝達
ネットワーク内での情報の伝達
コンセンサスを行うための検証情報など
issue
どのようなプロトコルを選択するべきなのか
この部分は独自の実装というよりどこを採用するのか
つまり暗号は必要なのかどうか
安全性を取るのか、ネットワーク内での通信速度を取るのか
このトレードオフでいいんだっけ???
ストレージ機能
特徴
実際のデータのオブジェクトを保存する
ストレージ機能の役割
オブジェクトの保存や検索を行うことができる
Monasでの役割
上記の機能と同じ
issue
様々な分散型ストレージなどもある中で実装する必要があるかは不明
例えばだけど、Monasを使ってサービスの実装を行いたい場合に、開発する人に委ねるって事はできる どこのストレージに保存可能にしていくのか
鍵共有プロトコル
特徴
鍵の共有を安全に行う
鍵共有プロトコル機能の役割
上記と同じ
Monasでの役割
上記と同じ
issue
どこのプロトコルを採用するのか
この部分はどのような通信プロトコルを採用するのかと同じかも?
鍵管理機能
特徴
鍵の保存を行う
鍵管理機能の役割
上記と同じ
Monasでの役割
上記と同じ
issue
どこに鍵の管理を行うのが良いのか?
安全であるとは何か?
鍵が失われた場合にどのように復元を行うのか
メモ:
おそらく最小サイズだと関数まで落ちてしまうから、関数の集合体的な形で、どこまで結合するかって感じか
それと、現在はまだ未開発だけどモジュールとして必要な部分はあるからそこも足していく必要はある
インターフェースとして何を提供したいのか?から逆算するといいのかも?
あかん、Monasでに役割なのか、それ単体でどのようなことができるのかの2つあるわ とりあえず役割を書きまくるか
あれだ、僕たちが独自で実装するのと、どこかのプロトコルを採用するのと一旦関係なくモジュールとして成り立つのを書き足しながら、後でここは1つのモジュールとして結合させる形が結構整理しやすいかも?
なんか書いていると段々とバラバラになっていっている気がするなーーーYudai.icon*3
参照: